package cd.cdyb.sms.utils;


public final class CacheUtils {

    private CacheUtils() {
    }

    /**
     * 缓存类型
     */
    public enum CacheType {
        /**
         * String（字符串），仅该类型可以使用cacheManager和@Cacheable处理，并且expiration为0时候，表示不过期
         */
        V,

        /**
         * List（列表）
         */
        L,

        /**
         * Set（集合）
         */
        S,

        /**
         * SortedSet（有序集合）
         */
        Z,

        /**
         * Hash（哈希表）
         */
        H
    }

    /**
     * 缓存名称
     */
    public enum CacheName {

        /**
         *  5分钟 登录验证码
         */
        LOGIN_AUTH_CODE(CacheType.V, 300),

        /**
         * 公司短信库存
         */
        COMPANY_SMS_INVENTORY(CacheType.V, 0),
        /**
         * 短信平台缓存key
         */
        CHECK_KEY(CacheType.V, 0),

        /**
         *  充值编号
         */
        RECHARGE_ORDER_NUMBER(CacheType.V, 0),

        /**
         * 公司凭证
         */
        COMPANY_CERTIFICATE(CacheType.V, 0),

        /**
         * 今日库存提示 24小时
         */
        DAY_INFO(CacheType.V, 60 * 60 * 24),


        /**
         * 缓存公司信息
         */
        COMPANY_INFO_KEY(CacheType.V, 60 * 60 * 24),

        /**
         * 设备全部信息
         */
        EQUIPMENT_STATUS_ALL(CacheType.V, 60 * 60 * 24),

        /**
         * 操作结果缓存
         */
        TER_CONTROL_RSP(CacheType.H, 30),

        /**
         * 短信模版
         */
        SMS_TEMPLATE(CacheType.V, 60 * 60),
        ;
        /**
         * 缓存类型
         */
        private CacheType type;

        /**
         * 缓存前缀
         */
        private String prefix;

        /**
         * 缓存匹配器
         */
        private String regex;

        /**
         * 过期时间
         */
        private long expiration;


        CacheName(CacheType cacheType, long expiration) {
            this.type = cacheType;
            this.expiration = expiration;
            this.prefix = this.name().concat(":");
            this.regex = prefix.concat("*");
        }

        public long getExpiration() {
            return expiration;
        }

        public String getPrefix() {
            return prefix;
        }

        public String getRegex() {
            return regex;
        }

        public CacheType getType() {
            return type;
        }
    }

    /**
     * 缓存名称
     */
    public enum CacheLockName {

        /**
         * 2秒过期，3秒等待 打卡
         */
        PUNCH_COUNT(2000, 3000),


        ;

        /**
         * 缓存前缀
         */
        private String prefix;

        /**
         * 缓存匹配器
         */
        private String regex;

        /**
         * 等待时间
         */
        private int expireMsecs;

        /**
         * 过期时间
         */
        private int timeoutMsecs;


        CacheLockName(int timeoutMsecs, int expireMsecs) {
            this.timeoutMsecs = timeoutMsecs;
            this.expireMsecs = expireMsecs;
            this.prefix = this.name().concat(":");
            this.regex = prefix.concat("*");
        }

        public int getExpireMsecs() {
            return expireMsecs;
        }

        public int getTimeoutMsecs() {
            return timeoutMsecs;
        }

        public String getPrefix() {
            return prefix;
        }

        public String getRegex() {
            return regex;
        }

    }
}
